A database server is a product that provides database services to computer applications in response to requests received therefrom. Such database services may include but are not limited to storing, retrieving, analyzing, or manipulating database data. Depending upon the implementation, the applications may be running on the same machine on which the database server is running or may be running on other machines that are connected to the machine on which the database server is running via one or more networks. To send requests to the database server, an application connects to the database server and establishes therewith what is referred to as a session. A session represents an ongoing interactive information exchange between the application and the database server. A session is set up or established at a certain point in time and then torn down at a later point in time. An established session often involves the sending of more than one message from the application to the database server and from the database server to the application.
After an application has initiated a session with a database server, a transaction may be opened between the application and server to perform a series of database operations. The transaction may be atomic such that all of the database operations occur, or none of them occur. As such, the application may send a command to the database server for execution within the context of a transaction. At some point in time, the connection that was established between the application and the database server may fail. For example, in a scenario in which the application and the database server are running on different machines, the connection may fail if the machine on which the database server is running is shut down or crashes or if there is a problem with a network that connects the different machines. If the connection fails, the session itself fails, and the transaction currently being processed by the database server fails. Due to the transaction failing, all of the operations of the transaction fail, whether or not the database server has already started processing them. As a result, the application has to implement retry logic to reattempt the entire transaction. However, retry logic is complex to implement in an application. Furthermore, when such an application is moved to a cloud environment, there are more possibilities for session failures due to the nature of cloud services. As such, the application may need to be modified to be better able to handle database access failures in the cloud.